<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
     /*
        对象属性的查询
        console.log(obj.a)
        对象属性的设置
        obj.a = 18;
     */


     /*1.如果属性直接存在于对象中　不在原型链上
        找到直接存在于对象中的属性
            ---没有setter/getter(数据描述符)---
                直接修改对象中的属性(注意writbale的值)
            ---有setter/getter(访问描述符)---
                直接调用set方法*/

     /*4.如果属性直接存在于对象中  也在原型链上
        找到直接存在于对象中的属性
            -数据描述符(没有setter/getter)
                直接修改对象中的属性(注意writbale的值)
            -访问描述符
                直接调用set方法*/

     /*2.如果属性不直接存在于对象中也不在原型链上
         在对象的直接属性中添加一个属性（数据描述符）
             value:"a"
             writable:true
             configurable:true
             enumerable:true*/


     /*3.如果属性不直接存在于对象中  在原型链上
         ①.该属性是数据描述符(没有setter/getter)
                -writbale为true
                    直接在对象中添加一个属性，我们称之为屏蔽属性
                -writbale为false
                    不会生成屏蔽属性
         ②.该属性是访问描述符(有setter/getter)
            调用set，不会生成屏蔽属性
       */

     // Object.prototype.a = "Object-a"
     Object.defineProperty(Object.prototype,"a",{
        /* writable:false,
         value:"Object-a",*/
         enumerable:true,
         configurable:true,
         get:function(){return "Object-a"},
         set:function(val){}
     })
     var obj={}
     obj.a = 18;
     console.log(obj);
</script>
</html>